package top.hjcwzx.wrench.limiter.annotation;

import top.hjcwzx.wrench.limiter.enums.AlgorithmStrategyEnum;
import top.hjcwzx.wrench.limiter.enums.KeyStrategyEnum;

import java.lang.annotation.*;

//Key限流
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface KeyRateLimiter {

    /**
     * 限流 key
     */
    String key() default "";

    /**
     * 每秒令牌数, 令牌数越大，每秒通过的请求越小
     */
    int permitsPerSecond() default 10;

    /**
     * key策略
     */
    KeyStrategyEnum keyStrategy() default KeyStrategyEnum.COMMON;

    /**
     * 限流算法
     */
    AlgorithmStrategyEnum algorithmStrategy() default AlgorithmStrategyEnum.TOKEN_BUCKET;

    /**
     * 限流后的降级方法
     */
    String fallbackMethod() default "";

    /**
     * fallback 所在 Bean 的类型，默认不指定
     */
    Class<?> fallbackBean() default void.class;
}
